//快乐数
//测试链接 https://leetcode.cn/problems/happy-number/
public class IsHappy {
    public boolean isHappy(int n) {
        /*
        解题思路：把每个变化后的数当作 链表的结点，并且这个链表一定是带环的链表，判定链表的进环位置是否为1
        */
        if(n == 1){
            return true;
        }
        //快慢指针
        int slow = func(n);
        int fast = func(func(n));

        while(slow != fast){
            slow = func(slow);
            fast = func(func(fast));
        }

        return slow == 1;
    }

    //求一个数，每一位数上的平方和
    public int func(int n){
        int ans = 0;
        while(n != 0){
            ans += (int)Math.pow((n%10),2);
            n/=10;
        }
        return ans;
    }
}
